package com.zhao.biz.scheduler

import com.zhao.dao.impl.BlackListDaoImpl
import com.zhao.entity.BlackList
import com.zhao.utils.JedisClusterUtil
import redis.clients.jedis.JedisCluster
import java.util
import java.util.{Timer, TimerTask}

import scala.collection.JavaConverters.mapAsScalaMapConverter

/**
 * Description: 定时器(热血传奇游戏运营项目完善->开启定时器,读取redis中数据,写入到RDBMS中存储起来),使用批处理进行优化<br/>
 * Copyright (c) ，2020 ， 赵 <br/>
 * This program is protected by copyright laws. <br/>
 * Date： 2020/12/14 11:09
 *
 * @author 柒柒
 * @version : 1.0
 */

object GameScheduler3 {
  def main(args: Array[String]): Unit = {

    //前提:
    //a)准备JedisCluster的实例
    val jedisCluster: JedisCluster = JedisClusterUtil.getJedisClusterInstanceFromPool
    //b)dao层
    val dao: BlackListDaoImpl = new BlackListDaoImpl
    //c)准备一个容器
    val container: java.util.LinkedList[BlackList] = new util.LinkedList[BlackList]()

    //Timer
    val timer: Timer = new Timer

    //开启定时器
    //TimerTask task →需要定时执行的任务
    // long delay → 第一次开始执行时，需要延迟的时间
    // long period →任务每次执行间隔的时间
    timer.schedule(new TimerTask {
      override def run(): Unit = {
        //思路
        //a)读物redis中存储的开了外挂的游戏玩家的信息(类型是:hash,key-illegalUsers)
        val blackListUsers: util.Map[String, String] = jedisCluster.hgetAll("illegalUsers")

        //b)将结果存入到RDBMS中(业务拓展,如:给每个开挂的玩家三次机会,若超过,由游戏后台运营人员注销该玩家的账户)
        import scala.collection.JavaConverters._
        val map = blackListUsers.asScala
        for ((k,v) <- map){
          val bean: BlackList = new BlackList(k.toString, v.toDouble, 1)
          container.add(bean)
        }

        //调用dao,正式操作db server
        dao.batchDealWith(container)

        //清空容器
        container.clear()
      }
    },0,2000)
  }
}












